package com.hxh.generater.springBoot.genBase;

import com.hxh.entity.Project;
import com.hxh.entity.TemplateConfig;
import com.hxh.entity.po.ClassInfo;

/**
 * @ProjectName: AICode
 * @Package: com.hxh.generater.springBoot.genBase
 * @ClassName: GenTableCRUD
 * @Author: HXH
 * @Description: 生成表的crud
 * @Date: 2024/5/21 17:00
 */
public interface GenTableCRUD {

    /**
     * @param project:
     * @param classInfo:
     * @return void
     * @author HXH
     * @description: 生成实体类、查询类
     * @date 2024/5/21
     **/
    void generationEntity(Project project, ClassInfo classInfo) throws Exception;

    /**
     * @param packageName    :
     * @param classInfo      :
     * @param templateConfig
     * @return java.lang.String
     * @author HXH
     * @description: 生成实体类、查询类，返回代码，脱离项目的束缚，用于通过建表语句生成代码
     * @date 2024/5/21
     **/
    String generationEntity(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;

    /**
     * @param packageName    :
     * @param classInfo      :
     * @param templateConfig
     * @return void
     * @author HXH
     * @description: 生成实体类、查询类，返回代码，脱离项目的束缚，用于通过建表语句生成代码
     * @date 2024/5/21
     **/
    String generationEntityInput(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;

    /**
     * @param project:
     * @param classInfo:
     * @return void
     * @author HXH
     * @description: 生成mybatis的mapper.xml
     * @date 2024/5/21
     **/
    void generationMapper(Project project, ClassInfo classInfo) throws Exception;

    /**
     * 用于通过建表语句生成代码
     *
     * @param packageName
     * @param classInfo
     * @param templateConfig
     * @return
     * @throws Exception
     */
    String generationMapper(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;

    /**
     * @param project:
     * @param classInfo:
     * @return void
     * @author HXH
     * @description: 生成dao层接口类
     * @date 2024/5/21
     **/
    void generationDaoClass(Project project, ClassInfo classInfo) throws Exception;

    /**
     * 用于通过建表语句生成代码
     *
     * @param packageName
     * @param classInfo
     * @return
     * @throws Exception
     */
    String generationDaoClass(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;

    /**
     * @param project:
     * @param classInfo:
     * @return void
     * @author HXH
     * @description: 生成service层代码
     * @date 2024/5/21
     **/
    void generationServiceClass(Project project, ClassInfo classInfo) throws Exception;

    /**
     * 用于通过建表语句生成代码
     *
     * @param packageName
     * @param classInfo
     * @param templateConfig
     * @return
     * @throws Exception
     */
    String generationServiceClass(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;

    /**
     * @param project:
     * @param classInfo:
     * @return void
     * @author HXH
     * @description: 生成serviceImpl层代码
     * @date 2024/5/21
     **/
    void generationServiceImplClass(Project project, ClassInfo classInfo) throws Exception;

    /**
     * 用于通过建表语句生成代码
     *
     * @param packageName
     * @param classInfo
     * @param templateConfig
     * @return
     * @throws Exception
     */
    String generationServiceImplClass(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;


    /**
     * @param project:
     * @param classInfo:
     * @return void
     * @author HXH
     * @description: 生成controller层代码
     * @date 2024/5/21
     **/
    void generationControllerClass(Project project, ClassInfo classInfo) throws Exception;

    /**
     * @param packageName    : 包名
     * @param classInfo      :
     * @param templateConfig
     * @return void
     * @author HXH
     * @description:
     * @date 2024/5/23
     **/
    String generationControllerClass(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception;

    /**
     * @param project:
     * @param initExtendTable: 是否生成自定义表的crud 是：生成数据库中所有表的crud   否：只生成模板框架的crud
     * @return void
     * @author HXH
     * @description: 生成全部表的crud
     * @date 2024/5/21
     **/
    void generationAllTableCRUD(Project project, boolean initExtendTable) throws Exception;


    /**
     * 创建mapping的原因：在配置数据导入导出时，需要读取数据库的字段和字段映射配置
     * 但是字段映射配置是保存在aicode工程的，实际项目数据库没有这个表，需要有一个介质保存
     *
     * @param project
     * @param classInfo
     * @throws Exception
     */
    void generationEntityMappingClass(Project project, ClassInfo classInfo) throws Exception;
}
